:- module(serveur,[
		
	]).
	
  /**
   * I - LE NOM DES SERVEURS.
   *
   * 	  Notre systême comportera 3 serveurs exactement.
   **/
   
  	 serveur(nom_serveur_1).

     
  
 /**
  * II - LES ETATS DU SERVEUR
  *
  *  Les états sont différents des positions géographique.
  *  Les différents étast du serveur sont les suivants:
  *  
  * 
  *   COMMANDE_RECUE - Le client sera dans cet état lorsqu'il aura collecté une
  *   commande de la part d'un client.
  *
  *   COMMANDE_ENTREE_REMISE - Le client est dans cet état lorsqu'il à remis une commande
  *   d'une entrée au spécialiste des entrées.
  *
  *   COMMANDE_DESSERT_REMISE - 
  *
  *   COMMANDE_PP_REMISE - 
  
  *   ATTENTE_ENTREE - 
  *   ENTREE_RECUPEREE -
  *
  *   ATTENTE_PP
  *   PP_RECUPEREE

  
  *   ATTENTE_DESSERT -
  *   DESSERT_RECUPEREE -  
  *
  *   PAIMENT_RECU - 
  
    
     
  **/
  
 /** III - LES ACTIONS DES SERVEURS
   *
   *
   * On les distingues en deux catégories.
   *
   * 	1. Les interactions directes avec les autres agents.
   *    2. Les déplacements dans l'univers.
   *
   ***
   *
   *
   * Les actions seront codées avec la syntaxe suivante :

   *    action(ACTION,CONDITION,A_SUPPRIMER,A_AJOUTER)
   *
   ****
   *    
   *    ACTION      :  action à executer
   *
   *    CONDITION   :  ensemble des conditions préalable à l'action.
   *
   *    A_SUPPRIMER :  ensembles etats,condition qui ne seront plus
   *                   valides après execution de l'environement.
   *
   *    A_AJOUTER   :  ensemble des nouvelles conditions valides après
   *                   execution de l'action.            
   *
  **/
  
   /**
    * II-1. ALLER_AUPRES_DU_CLIENT
    *
    **
    *
    *   CONDITION:
    *
    * 		menu du client choisi OU  entree recuperee OU dessert recuperé OU
    *       plat principal recupere OU client en attente de payer.
    *  
    *
    **/
    aller_aupres_client().
    
    
  /**
   * II-2. ALLER_AU_SPECIALISTE_ENTREE
   * 
   *
   *
   *  CONDITION
   * 
   * 	commande reçue OU (attente du entree ET entree preparée par spécialiste) 
   *  
   **/
   aller_au_specialiste_entree().
   
   
   /**
   *
   * II-3. ALLER_AU_SPECIALISTE_PP
   *
   **
   *
   *
   * CONDITION:
   * 	
   * 	(commande_pp_remise) OU (en attente de plat principal ET plat principal préparé)
        OU plat
   *
   *
   **/
   aller_au_specialiste_pp().
   
   
   
   /**
   *
   * II-4. ALLER_AU_SPECIALISTE_DESSERT
   *
   **
   *
   *
   * CONDITION:
   * 	
   * 	(commande_pp_remise) OU (en attente de dessert ET dessert préparé)
   *
   *
   **/
   aller_au_specialiste_dessert().
   
  /**
       * II-5. SERVIR_ENTREE
       * 
       *  Le serveur executera cette commande pour servir un plat(une entrée,
       *  un plat principal et dessert) au client concerné. Il ne pourra le faire
       *  qu'après avoir collecté ce même plat chez le chef (COLLECTER_UN_PLAT).
       *
       *  CONDITIONS :
	   * 
	   *    serveur chez le client ET entree recuperee
	   *  
       **/
       servir_entree().
       
     /**
       * II-6. SERVIR_PLAT_PRINCIPAL
       * 
       *  Le serveur executera cette commande pour servir un plat(une entrée,
       *  un plat principal et dessert) au client concerné. Il ne pourra le faire
       *  qu'après avoir collecté ce même plat chez le chef (COLLECTER_UN_PLAT).
       *
       *  CONDITIONS :
       * 	serveur chez le client ET plat principal recuperee
       *
       **/
       
       servir_plat_principal().       
       
     /**
       * II-7. SERVIR_DESSERT
       * 
       *  Le serveur executera cette commande pour servir un plat(une entrée,
       *  un plat principal et dessert) au client concerné. Il ne pourra le faire
       *  qu'après avoir collecté ce même plat chez le chef (COLLECTER_UN_PLAT).
       *
       *  CONDITIONS :
       *
       *
       *  serveur chez le client ET dessert recuperé
       **/
       
       servir_un_dessert(). 
       
       
       
   /**
   *  II-8. REMETTRE_COMMANDE_ENTREE
   **
   *
   *
   *  CONDITION:
   *    le serveur auprès du spécialiste des entrées ET commande reçue
   **/
   remettre_commande_entree().
   
   /**
   *  II-8. REMETTRE_COMMANDE_PP
   **
   *
   *
   *  CONDITION:
   *    le serveur auprès du spécialiste des plats principaux ET commande reçue
   *    ET commande entree remise.
   **/
   remettre_commande_pp().
   
   /**
   *  II-8. REMETTRE_COMMANDE_DESSERT
   **
   *
   *
   *  CONDITION:
   *    le serveur auprès du spécialiste des desserts ET commande reçue 
   *    ET commande plat principal remise.
   **/
   remettre_commande_dessert().      